package com.socket.nio.nio;

import io.netty.buffer.ByteBufAllocator;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.ChannelOutboundHandlerAdapter;
import io.netty.channel.ChannelPromise;
import io.netty.channel.embedded.EmbeddedChannel;
import lombok.extern.slf4j.Slf4j;

/**
 * @author Hexudong
 * @date 2025/4/12
 */
@Slf4j
public class TestEmbeddedChannel {
  public static void main(String[] args) {
    ChannelInboundHandlerAdapter h1 = new ChannelInboundHandlerAdapter() {
      @Override
      public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        log.debug("读取数据 [1]");
        super.channelRead(ctx, msg);
      }
    };

    ChannelInboundHandlerAdapter h2 = new ChannelInboundHandlerAdapter() {
      @Override
      public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        log.debug("读取数据 [2]");
        super.channelRead(ctx, msg);
      }
    };

    ChannelOutboundHandlerAdapter h3 = new ChannelOutboundHandlerAdapter() {
      @Override
      public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
        log.debug("写入数据 [3]");
        super.write(ctx, msg, promise);
      }
    };

    ChannelOutboundHandlerAdapter h4 = new ChannelOutboundHandlerAdapter() {
      @Override
      public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
        log.debug("写入数据 [4]");
        super.write(ctx, msg, promise);
      }
    };

    EmbeddedChannel channel = new EmbeddedChannel(h1,h2,h3,h4);
    //channel.writeInbound(ByteBufAllocator.DEFAULT.buffer().writeBytes("hello".getBytes()));
    channel.writeOutbound(ByteBufAllocator.DEFAULT.buffer().writeBytes("world".getBytes()));
  }
}
